package py.com.erpone.session.dm;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Stateful;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;

import org.primefaces.model.DualListModel;

import py.com.erpone.entity.dm.FormaPago;
import py.com.erpone.entity.dm.OrdenCompra;
import py.com.erpone.entity.dm.Producto;
import py.com.erpone.entity.dm.Proveedor;
import py.com.erpone.entity.dm.Rol;
import py.com.erpone.entity.dm.SolicitudCotizacion;
import py.com.erpone.entity.dm.SolicitudPedido;
import py.com.erpone.entity.dm.SolicitudPedidoDetalle;
import py.com.erpone.entity.dm.Usuario;
import py.com.erpone.session.dm.list.ProductoList;
import py.com.erpone.session.dm.list.ProveedorList;
import py.com.erpone.session.dm.list.SolicitudCotizacionesList;
import py.com.erpone.session.dm.list.SolicitudPedidoList;
import py.com.erpone.util.LocaleSelector;
import py.com.erpone.view.datamodel.ProductoDataModel;
import py.com.erpone.view.datamodel.ProveedorDataModel;
import py.com.erpone.view.datamodel.SolicitudCotizacionModel;

@Stateful
@Named
@LocalBean
@ConversationScoped
public class OrdenCompraBean {
	

	@PersistenceContext(type = PersistenceContextType.EXTENDED)
	private EntityManager em;
	@Inject
	LocaleSelector localeSelector;
	@Inject
	private Conversation conversation;
    
	private SolicitudCotizacionModel solicitudCotizacionModel;
	

	@Inject
	private SolicitudCotizacionesList solicitudCotizacionList;
	
	private OrdenCompra ordenCompra;
	//Se ejecuta cada rato
	@PostConstruct
	public void postConstruct() {
		solicitudCotizacionModel = new SolicitudCotizacionModel(solicitudCotizacionList.findAllAdjudicados());
		ordenCompra = new OrdenCompra ();
		ordenCompra.setSolicitudCotizacion(new SolicitudCotizacion());
		ordenCompra.setFecha(new Date());
	}

	public SolicitudCotizacionModel getSolicitudCotizacionModel() {
		return solicitudCotizacionModel;
	}



	public void setSolicitudCotizacionModel(
			SolicitudCotizacionModel solicitudCotizacionModel) {
		this.solicitudCotizacionModel = solicitudCotizacionModel;
	}


	
	public SolicitudCotizacionesList getSolicitudCotizacionList() {
		return solicitudCotizacionList;
	}


	public void setSolicitudCotizacionList(
			SolicitudCotizacionesList solicitudCotizacionList) {
		this.solicitudCotizacionList = solicitudCotizacionList;
	}


	public OrdenCompra getOrdenCompra() {
		return ordenCompra;
	}
	public HashMap<String, String> getSituaciones() {
		if(ordenCompra == null)return null;
		HashMap<String, String> retorno = new HashMap<String, String>();
		Map<String, String> map = ordenCompra.getListSituacion();
		for (Map.Entry<String, String> entry : map.entrySet()){
			retorno.put(localeSelector.getMensaje("situacion."+entry.getKey()), entry.getValue());
		}
		return retorno;
	}
	public String getSituacionExtenso(String key, HashMap<String, String> listSituacion) {
		String retorno = key;
		Map<String, String> map = listSituacion;
		for (Map.Entry<String, String> entry : map.entrySet()){
			if(key.equals(entry.getKey()))
				retorno = localeSelector.getMensaje("situacion."+entry.getKey());
		}		
		return retorno;
	}

	public void setOrdenCompra(OrdenCompra ordenCompra) {
		this.ordenCompra = ordenCompra;
	}
   
	public String iniciar() {
		if (conversation.isTransient())
			conversation.begin();
		return "/compras/ordenDeCompra.xhtml";
		
	}
	

	public String iniciar2(OrdenCompra ordenCompra) {
		if (conversation.isTransient())
			conversation.begin();
		this.ordenCompra = ordenCompra;
		return "/compras/ordenDeCompraDetail.xhtml";
	//	solicitudCotizacionModel = new SolicitudCotizacionModel(solicitudCotizacionList.findAll());
	}

	public String guardar() {
		ordenCompra.setSituacion(OrdenCompra.SITUACION_ABIERTO);
		ordenCompra.setFecha(new Date());
		if (ordenCompra.getId() == null){
			em.persist(ordenCompra);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, localeSelector.getMensaje("comun.exito.creado"), null));	           

		}else{
			em.merge(ordenCompra);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, localeSelector.getMensaje("comun.exito.actualizado"), null));	           

		}
		if (!conversation.isTransient())
			conversation.end();
		ordenCompra.getSolicitudCotizacion().setSituacion(SolicitudCotizacion.SITUACION_FINALIZADO);
		em.merge(ordenCompra.getSolicitudCotizacion());
		return "/compras/ordenesDeCompra.xhtml";
	}

	public void eliminar(OrdenCompra ordenCompra) {
		em.remove(em.merge(ordenCompra));
		if (!conversation.isTransient())
			conversation.end();

	}

	public String cancelar() {
		if (!conversation.isTransient())
			conversation.end();
		return "/compras/ordenesDeCompra.xhmtl";
	}

}
